package cn.com.dcsgo.service;

import cn.com.dcsgo.domain.SysUser;
import cn.com.dcsgo.dto.PageDTO;
import cn.com.dcsgo.dto.SysUserAddDTO;
import cn.com.dcsgo.dto.SysUserQueryDTO;
import cn.com.dcsgo.dto.SysUserUpdateDTO;
import cn.com.dcsgo.vo.SysUserVO;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * 针对表【sys_user(后台用户)】的数据库操作Service
 *
 * @author Dcsgo
 * @since 2025-09-22 15:09:11
 */
public interface SysUserService extends IService<SysUser> {

    /**
     * 分页查询用户信息
     *
     * @param pageDTO         分页请求参数
     * @param sysUserQueryDTO 查询后台管理用户的请求参数
     * @return 用户信息分页数据(按创建时间升序排序)
     */
    Page<SysUser> getPage(PageDTO pageDTO, SysUserQueryDTO sysUserQueryDTO);

    /**
     * 添加用户
     *
     * @param sysUserAddDTO 添加用户请求参数
     * @return 数据库中受影响的行数
     */
    int addUser(SysUserAddDTO sysUserAddDTO);

    /**
     * 根据用户id获取用户信息
     *
     * @param id 用户id
     * @return 用户信息（不包含密码和店铺ID，包含角色ID列表）
     */
    SysUserVO getUserInfoById(Long id);

    /**
     * 更新用户，可以更新密码和角色ID列表
     *
     * @param sysUserUpdateDTO 修改后台用户请求参数
     * @return 数据库中受影响的行数
     */
    int updateUser(SysUserUpdateDTO sysUserUpdateDTO);

    /**
     * 删除用户，及其在用户角色关联表中的数据，会检查shopId，有shopId==1的删除失败
     *
     * @param id 用户id
     * @return 受影响的行数
     */
    int removeUserById(Long id);

    /**
     * 批量删除用户，及其在用户角色关联表中的数据，不会检查shopId，有userId==1的删除失败
     * @param ids 用户id列表
     * @return 受影响的行数
     */
    int removeUserByIds(List<Long> ids);
}
